package com.ada.spark.action

import org.apache.spark.{SparkConf, SparkContext}

/**
  * 作用：通过func函数聚集RDD中的所有元素，先聚合分区内数据，再聚合分区间数据。
  */
object Demo1_reduce {
    def main(args: Array[String]): Unit = {
        //创建SparkConf
        val conf = new SparkConf().setAppName("Demo1_reduce").setMaster("local[*]")
        //创建Spark上下文对象
        val sc = new SparkContext(conf)

        val rdd1 = sc.makeRDD(1 to 10, 2)

        //通过func函数聚集RDD中的所有元素，先聚合分区内数据，再聚合分区间数据。
        val reduceRDD: Int = rdd1.reduce(_ + _)

        println(reduceRDD)
        //55

        val rdd2 = sc.makeRDD(Array(("a", 1), ("a", 3), ("c", 3), ("d", 5)))

        val reduceRDD2: (String, Int) = rdd2.reduce((x, y) => (x._1 + y._1, x._2 + y._2))

        println(reduceRDD2)
        //(aacd,12)
    }
}
